package com.yuan.statemachine.core;

/**
 * @author wjwei
 */
public interface StateMachine<F extends Enum<F>,S extends Enum<S>,E extends Enum<E>> {

    /**
     * 执行动作
     * @param function 业务功能枚举
     * @param status 当前状态
     * @param event 执行事件
     * @param data 业务数据
     * @return 执行结果
     */
    StateResponseBody doAction(Enum<F> function, Enum<S> status, Enum<E> event, Object data);

    /**
     * 注册状态事件
     * @param stateClass 状态事件实现类
     * @param status 业务状态枚举
     * @param function 业务功能枚举
     */
    void register(AbstractStateMachine<F,S,E> stateClass, Enum<S> status, Enum<F> function);
}
